define('ace/mode/diff_highlight_rules', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
  'use strict'

  var oop = require('../lib/oop')
  var TextHighlightRules = require('./text_highlight_rules').TextHighlightRules

  var DiffHighlightRules = function() {
    this.$rules = {
      'start': [{
        regex: '^(?:\\*{15}|={67}|-{3}|\\+{3})$',
        token: 'punctuation.definition.separator.diff',
        'name': 'keyword'
      }, { // diff.range.unified
        regex: '^(@@)(\\s*.+?\\s*)(@@)(.*)$',
        token: [
          'constant',
          'constant.numeric',
          'constant',
          'comment.doc.tag'
        ]
      }, { // diff.range.normal
        regex: '^(\\d+)([,\\d]+)(a|d|c)(\\d+)([,\\d]+)(.*)$',
        token: [
          'constant.numeric',
          'punctuation.definition.range.diff',
          'constant.function',
          'constant.numeric',
          'punctuation.definition.range.diff',
          'invalid'
        ],
        'name': 'meta.'
      }, {
        regex: '^(\\-{3}|\\+{3}|\\*{3})( .+)$',
        token: [
          'constant.numeric',
          'meta.tag'
        ]
      }, { // added
        regex: '^([!+>])(.*?)(\\s*)$',
        token: [
          'support.constant',
          'text',
          'invalid'
        ]
      }, { // removed
        regex: '^([<\\-])(.*?)(\\s*)$',
        token: [
          'support.function',
          'string',
          'invalid'
        ]
      }, {
        regex: '^(diff)(\\s+--\\w+)?(.+?)( .+)?$',
        token: ['variable', 'variable', 'keyword', 'variable']
      }, {
        regex: '^Index.+$',
        token: 'variable'
      }, {
        regex: '^\\s+$',
        token: 'text'
      }, {
        regex: '\\s*$',
        token: 'invalid'
      }, {
        defaultToken: 'invisible',
        caseInsensitive: true
      }
      ]
    }
  }

  oop.inherits(DiffHighlightRules, TextHighlightRules)

  exports.DiffHighlightRules = DiffHighlightRules
})

define('ace/mode/folding/diff', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/folding/fold_mode', 'ace/range'], function(require, exports, module) {
  'use strict'

  var oop = require('../../lib/oop')
  var BaseFoldMode = require('./fold_mode').FoldMode
  var Range = require('../../range').Range

  var FoldMode = exports.FoldMode = function(levels, flag) {
    this.regExpList = levels
    this.flag = flag
    this.foldingStartMarker = RegExp('^(' + levels.join('|') + ')', this.flag)
  }
  oop.inherits(FoldMode, BaseFoldMode);

  (function() {
    this.getFoldWidgetRange = function(session, foldStyle, row) {
      var line = session.getLine(row)
      var start = { row: row, column: line.length }

      var regList = this.regExpList
      for (var i = 1; i <= regList.length; i++) {
        var re = RegExp('^(' + regList.slice(0, i).join('|') + ')', this.flag)
        if (re.test(line)) { break }
      }

      for (var l = session.getLength(); ++row < l;) {
        line = session.getLine(row)
        if (re.test(line)) { break }
      }
      if (row == start.row + 1) { return }
      return Range.fromPoints(start, { row: row - 1, column: line.length })
    }
  }).call(FoldMode.prototype)
})

define('ace/mode/diff', ['require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text', 'ace/mode/diff_highlight_rules', 'ace/mode/folding/diff'], function(require, exports, module) {
  'use strict'

  var oop = require('../lib/oop')
  var TextMode = require('./text').Mode
  var HighlightRules = require('./diff_highlight_rules').DiffHighlightRules
  var FoldMode = require('./folding/diff').FoldMode

  var Mode = function() {
    this.HighlightRules = HighlightRules
    this.foldingRules = new FoldMode(['diff', 'index', '\\+{3}', '@@|\\*{5}'], 'i')
  }
  oop.inherits(Mode, TextMode);

  (function() {
    this.$id = 'ace/mode/diff'
  }).call(Mode.prototype)

  exports.Mode = Mode
});
(function() {
  window.require(['ace/mode/diff'], function(m) {
    if (typeof module === 'object' && typeof exports === 'object' && module) {
      module.exports = m
    }
  })
})()
